<?php

Yii::import('campanias.models._base.BaseCampaniaClientesOwner');

class CampaniaClientesOwner extends BaseCampaniaClientesOwner {

    /**
     * @return CampaniaClientesOwner
     */
    public $cantidad_mail;
    public $cantidad_sms;
    public $cantidad_llamada;
    public $grupos;
    public $numCuentas;
    public $idGrupo;
    public $nombreGrupo;
    public $entidad_tipo;
    public $cargo;
    public $cuenta_id;
    public $contacto_id;
    public $identificacion;
    public $clienteOwnerId;
    public $telefono;
    public $celular;
    public $email_1;
    public $email_2;

    /**
     * Mostrar los datos que no estan en l modelo
     * @var type 
     */
    public $nombre;
    public $fecha_inicio;
    public $fecha_fin;

    /**
     * 
     * @param type $className
     * @return type
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    /**
     * 
     * @param type $n
     * @return type
     */
    public static function label($n = 1) {
        return Yii::t('app', 'CampaniaClientesOwner|CampaniaClientesOwners', $n);
    }

    /**
     * 
     * @return type
     */
    public function rules() {
        return array_merge(parent::rules(), array(
            array('cargo,cuenta_id,clienteOwnerId,cantidad_mail,cantidad_sms,cantidad_llamada,identificacion', 'safe', 'on' => 'search'),
        ));
    }

    /**
     * 
     * @return type
     */
    public function relations() {
        return array(
            'campania' => array(self::BELONGS_TO, 'Campania', 'campania_id'),
            'cliente' => array(self::BELONGS_TO, 'Contacto', 'cliente_id'),
        );
    }

    /**
     * 
     * @return type
     */
    public function searchParams($gestionOperador = null) {

        if ($gestionOperador) {
            return array(
                'cliente_id',
                'identificacion',
            );
        } else {
            return array(
                'cliente_id',
                'cargo',
                'cuenta_id',
                'campania_id',
                'owner_id',
                'identificacion',
            );
        }
    }

    /**
     * 
     * @param type $campania_id
     * @return \CampaniaClientesOwner
     */
    public function de_cuenta($campania_id) {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 'campania_id = :campania_id',
                    'params' => array(
                        ':campania_id' => $campania_id
                    ),
                )
        );
        return $this;
    }

    /**
     * 
     * @param type $id_owner
     * @return \CampaniaClientesOwner
     */
    public function de_owner($id_owner) {
        if (!Yii::app()->user->isSuperAdmin) {
            if ($id_owner) {
                $this->getDbCriteria()->mergeWith(
                        array(
                            'condition' => 't.owner_id = :owner_id',
                            'params' => array(
                                ':owner_id' => $id_owner
                            ),
                        )
                );
            }
        }

        return $this;
    }

    /**
     * 
     * @return type
     */
    public function attributeLabels() {
        return array(
            'grupos' => Yii::t('app', 'Contacto'),
            'cliente_id' => Yii::t('app', 'Contacto'),
            'cargo_contacto' => Yii::t('app', 'Cargo'),
            'cuenta_id' => Yii::t('app', 'Cuenta'),
            'clienteOwnerId' => Yii::t('app', 'Id Campania Cliente'),
            'owner_id' => Yii::t('app', 'Operador'),
            'fecha_inicio' => Yii::t('app', 'Fecha de Inicio'),
            'fecha_fin' => Yii::t('app', 'Fecha de Finalización'),
        );
    }

    /**
     * 
     * @param type $campania_id
     * @return type
     */
    public function getUsersCampaniaGrupoContador($campania_id = null) {
        $command = Yii::app()->db->createCommand()
                ->select("
                        count(c.id) as numCuentas,
                        g.id as idGrupo,
                        g.nombre as nombre
                        ")
                ->from("cuenta c")
                ->join('grupo_cuenta gc', 'c.id = gc.cuenta_id')
                ->join('grupo g', 'gc.grupo_id=g.id')
                ->andwhere("c.id not in (select cco.cuenta_id from campania_clientes_owner cco where cco.campania_id  = :campania_id)", array(':campania_id' => $campania_id));
        return ($command->queryAll());
    }

    /**
     * carga de cuentas segun grupo en lotes 
     * @param type $grupo_id
     * @param type $limitIni
     * @param type $limitFin
     * @return type
     */
    public function getCuentasGrupoLotes($grupos_id, $campania_id, $limitIni, $limitFin) {
        $command = Yii::app()->db->createCommand()
                ->select("
                        c.id as id,
                        c.nombre as nombre,
                        g.nombre as nombreGrupo
                        ")
                ->from("cuenta c")
                ->join('grupo_cuenta gc', 'c.id = gc.cuenta_id')
                ->join('grupo g', 'gc.grupo_id=g.id')
//                ->leftJoin("campania_clientes_owner cco", "c.id = cco.cuenta_id")
                ->where("c.id not in (select cco.cliente_id from campania_clientes_owner cco where cco.campania_id = :campania_id)", array(':campania_id' => $campania_id
                ))
                ->andwhere("g.id in (" . $grupos_id . ")");
        $command->group('c.id');
        $command->limit($limitFin, $limitIni);
//                ->andwhere("c.id not in (selsect cco.cuenta_id from campania_clientes_owner cco where cco.campania_id  = :campania_id)", array(':campania_id' => $campania_id));
//        var_dump($command);
//        die();
        return ($command->queryAll());
    }

    /**
     * 
     * @param type $grupos_id
     * @param type $campania_id
     * @param type $limitIni
     * @param type $limitFin
     * @return type
     */
    public function getContactosGrupoLotes($grupos_cuenta_id, $grupos_contacto_id, $campania_id, $limitIni, $limitFin) {
//    SELECT co.id ,co.nombre,co.apellido, co.cuenta_id,gco.grupo_id 
//        FROM contacto co
//	join grupo_contacto gco on gco.contacto_id=co.id
//          where
//      and co.id not in (select cco.cliente_id from campania_clientes_owner cco where cco.campania_id =9)
//      co.cuenta_id  in (select cu.id from cuenta cu join grupo_cuenta gc on gc.cuenta_id=cu.id where gc.grupo_id in (11,12) ) 
//      and gco.grupo_id in (2);

        $command = Yii::app()->db->createCommand()
                ->select("
                        co.id as id,
                        co.nombre as nombre,
                        ")
                ->from("contacto co")
                ->join('grupo_contacto gco', 'gco.contacto_id=co.id')
                ->where(" co.id not in (select cco.cliente_id from campania_clientes_owner cco where cco.campania_id =:campania_id)", array(':campania_id' => $campania_id
        ));
        if ($grupos_cuenta_id) {
            $command->andWhere(" co.cuenta_id  in (select cu.id from cuenta cu join grupo_cuenta gc on gc.cuenta_id=cu.id where gc.grupo_id in ($grupos_cuenta_id))");
        }
        if ($grupos_contacto_id) {
            $command->andWhere(" gco.grupo_id in ($grupos_contacto_id)");
        }

        $command->group('co.id');
        $command->limit($limitFin, $limitIni);
        return ($command->queryAll());
    }

    /**
     * Cuentas de la campaña
     * @param type $campania_id
     * @return type
     */
    public function getCuentasCampania($campania_id) {
        $command = Yii::app()->db->createCommand()
                ->select("
                        cco.cliente_id as cuenta_id
                        ,cco.owner_id as operador_id
                        ")
                ->from("campania_clientes_owner cco")
                ->where("g.id = :grupo_id", array(':grupo_id' => $grupo_id));
        if ($discartIds) {
            $command->andWhere("c.id not in $discartIds");
        }
        $command->limit($limitFin, $limitIni);
//                ->andwhere("c.id not in (selsect cco.cuenta_id from campania_clientes_owner cco where cco.campania_id  = :campania_id)", array(':campania_id' => $campania_id));
//        var_dump($command);
//        die();
        return ($command->queryAll());
    }

    public function searchCuentasCampaniasGrupos($campania_id) {
//  select 
//  g.nombre, count(co.id)
//  from   cuenta t 
//  inner join (grupo_cuenta gcu join grupo g ON g.id = gcu.grupo_id) ON t.id = gcu.cuenta_id
//  inner join   (contacto co inner join grupo_contacto gc ON gc.contacto_id = co.id ) ON co.cuenta_id = t.id
//  where co.id not in (select cco.cliente_id from campania_clientes_owner cco  where cco.campania_id = 9)
//  group by g.id
        $criteria = new CDbCriteria;
        $criteria->select = " count(co.id) as numCuentas,g.id as id, g.nombre as nombreGrupo";
        $criteria->join = "inner join (grupo_cuenta gcu join grupo g ON g.id = gcu.grupo_id) ON t.id = gcu.cuenta_id";
        $criteria->join .= "  inner join (contacto co inner join grupo_contacto gc ON gc.contacto_id = co.id ) ON co.cuenta_id = t.id";
        $criteria->addCondition('co.id not in (select cco.cliente_id from campania_clientes_owner cco  where cco.campania_id = :camapania_id)', 'AND');
        $criteria->group = "g.id";
        $criteria->params = array(':camapania_id' => $campania_id);
//        die(var_dump($criteria));
        return new CActiveDataProvider('Cuenta', array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
        ));
    }

    /**
     * 
     * @param type $campania_id
     * @return \CActiveDataProvider
     */
    public function searchContactoCampaniasGrupos($campania_id) {
//        select 
//       g.nombre, count(t.id)
// from contacto t
//   inner join (grupo_contacto gcu join grupo g ON g.id = gcu.grupo_id) ON t.id = gcu.contacto_id
//   where t.id not in (select cco.cliente_id from campania_clientes_owner cco  where cco.campania_id = 9)
//group by g.id;
        $criteria = new CDbCriteria;
        $criteria->select = "count(t.id) as numCuentas,g.id as id, g.nombre as nombreGrupo";
        $criteria->join = " inner join (grupo_contacto gcu join grupo g ON g.id = gcu.grupo_id) ON t.id = gcu.contacto_id";
//        $criteria->join = " left join campania_clientes_owner cco on t.id = cco.cuenta_id";
//        $criteria->join .= " left join grupo_contacto gc on gc.contacto_id = t.id";
//        $criteria->join .= " left join grupo g on gc.grupo_id = g.id";
        $criteria->addCondition('t.id not in (select cco.cliente_id from campania_clientes_owner cco  where cco.campania_id = :camapania_id)', 'AND');
//        $criteria->addCondition('g.entidad_tipo=:entidad_tipo', 'AND');
//        $criteria->addCondition('g.id is not null', 'AND');
        $criteria->group = "g.id";
        $criteria->params = array(':camapania_id' => $campania_id);
        return new CActiveDataProvider('Contacto', array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
                )
        );
    }

    /**
     * Devuelve las cuentas que no tengan un operador asignado en una campania especifica.
     * @param type $campania_id
     * @param type $limitIni
     * @param type $limitFin
     * @return type
     */
    public function getCuentasSinOperador($campania_id, $limitIni, $limitFin) {
        $command = Yii::app()->db->createCommand()
                ->select("*")
                ->from("campania_clientes_owner cco")
                ->where("cco.owner_id=0 AND cco.campania_id=:campania_id", array(':campania_id' => $campania_id));
        $command->limit($limitFin, $limitIni);
        return ($command->queryAll());
    }

    public function numLlamadaOperador($idCliente, $campania_id) {
        $command = Yii::app()->db->createCommand()
                ->select("
                       count(ll.id) as count
                        ")
                ->from("campania_entidad ce")
                ->join('llamada ll', 'll.id=ce.entidad_id')
                ->join('contacto c', 'c.id=ll.contacto_id')
                ->where("c.id=:cuenta_id and ce.campania_id=:campania_id and ce.entidad_tipo=:tipo", array(
                    ':cuenta_id' => $idCliente, // es  l ide del cliente contacto
//                    ':campania_id' => $this->campania_id,
                    ':campania_id' => $campania_id,
                    ':tipo' => Campanias_Constants::LLAMADA,))
                ->group('ce.entidad_tipo');
        $resultado = $command->queryAll();
        $count = !empty($resultado) ? $resultado[0]['count'] : 0;

        return $count;
    }

    public function numLlamada() {
        $command = Yii::app()->db->createCommand()
                ->select("
                       count(ll.id) as count
                        ")
                ->from("campania_entidad ce")
                ->join('llamada ll', 'll.id=ce.entidad_id')
                ->join('contacto c', 'c.id=ll.contacto_id')
                ->where("c.id=:cuenta_id and ce.campania_id=:campania_id and ce.entidad_tipo=:tipo", array(
                    ':cuenta_id' => $this->cliente_id,
                    ':campania_id' => $this->campania_id,
                    ':tipo' => Campanias_Constants::LLAMADA,))
                ->group('ce.entidad_tipo');
        $resultado = $command->queryAll();
        $count = !empty($resultado) ? $resultado[0]['count'] : 0;
        return $count;
    }

    public function numSmsOperador($idCliente, $campania_id) {
        $command = Yii::app()->db->createCommand()
                ->select("
                       count(ll.id) as count
                        ")
                ->from("campania_entidad ce")
                ->join('sms ll', 'll.id=ce.entidad_id')
                ->join('contacto c', 'c.id=ll.contacto_id')
                ->where("c.id=:cuenta_id and ce.campania_id=:campania_id and ce.entidad_tipo=:tipo", array(
                    ':cuenta_id' => $idCliente,
//                    ':campania_id' => $this->campania_id,
                    ':campania_id' => $campania_id,
                    ':tipo' => Campanias_Constants::SMS,)
                )
                ->group('ce.entidad_tipo');
        $resultado = $command->queryAll();
        $count = !empty($resultado) ? $resultado[0]['count'] : 0;

        return $count;
    }

    public function numEmail() {
        $command = Yii::app()->db->createCommand()
                ->select("
                       count(ll.id) as count
                        ")
                ->from("campania_entidad ce")
                ->join('mail ll', 'll.id=ce.entidad_id')
                ->join('contacto c', 'c.id=ll.contacto_id')
                ->where("c.id=:cuenta_id and ce.campania_id=:campania_id and ce.entidad_tipo=:tipo", array(
                    ':cuenta_id' => $this->cliente_id,
                    ':campania_id' => $this->campania_id,
                    ':tipo' => Campanias_Constants::EMAIL,))
                ->group('ce.entidad_tipo');
        $resultado = $command->queryAll();
        $count = !empty($resultado) ? $resultado[0]['count'] : 0;
        return $count;
    }

    public function numEmailOperador($idCliente, $campania_id) {
        $command = Yii::app()->db->createCommand()
                ->select("
                       count(ll.id) as count
                        ")
                ->from("campania_entidad ce")
                ->join('mail ll', 'll.id=ce.entidad_id')
                ->join('contacto c', 'c.id=ll.contacto_id')
                ->where("c.id=:cuenta_id and ce.campania_id=:campania_id and ce.entidad_tipo=:tipo", array(
                    ':cuenta_id' => $idCliente,
//                    ':campania_id' => $this->campania_id,
                    ':campania_id' => $campania_id,
                    ':tipo' => Campanias_Constants::EMAIL,))
                ->group('ce.entidad_tipo');
        $resultado = $command->queryAll();
        $count = !empty($resultado) ? $resultado[0]['count'] : 0;
        return $count;
    }

    public function numSms() {
        $command = Yii::app()->db->createCommand()
                ->select("
                       count(ll.id) as count
                        ")
                ->from("campania_entidad ce")
                ->join('sms ll', 'll.id=ce.entidad_id')
                ->join('contacto c', 'c.id=ll.contacto_id')
                ->where("c.id=:cuenta_id and ce.campania_id=:campania_id and ce.entidad_tipo=:tipo", array(
                    ':cuenta_id' => $this->cliente_id,
                    ':campania_id' => $this->campania_id,
                    ':tipo' => Campanias_Constants::SMS,))
                ->group('ce.entidad_tipo');
        $resultado = $command->queryAll();
        $count = !empty($resultado) ? $resultado[0]['count'] : 0;

        return $count;
    }

    /**
     * 
     * @param type $campania_id
     * @return \CActiveDataProvider
     */
    public function searchContactosCampania($campania_id = null, $idOperador = null) {
//        var_dump($campania_id, $idOperador);
        $criteria = new CDbCriteria;
        $sort = new CSort;
        $sort->multiSort = true;
//        select 
//        co.id as contacto_id,
//        (select count(*) from (campania_entidad ce inner join llamada ll on ce.entidad_id=ll.id and ce.entidad_tipo='LLAMADA')where ll.contacto_id=co.id ) as llamaa,
//        (select count(*) from (campania_entidad ce inner join sms s on ce.entidad_id=s.id and ce.entidad_tipo='SMS')where s.contacto_id=co.id ) as sms,
//        (select count(*) from (campania_entidad ce inner join mail ml on ce.entidad_id=ml.id and ce.entidad_tipo='EMAIL')where ml.contacto_id=co.id ) as mail
//        from 
//        campania_clientes_owner t inner join contacto co  on co.id=t.cliente_id  and t.campania_id=9
//        group by co.id;


        $criteria->select = " t.id as id,t.campania_id as campania_id,
               (select  cus.username from cruge_user cus where cus.iduser=t.owner_id) as owner_id,
                co.id as contacto_id,co.documento as identificacion,
                (select te.numero from  telefono te where te.entidad_tipo = 'CONTACTO' AND te.tipo='CELULAR' AND te.entidad_id = co.id order by te.principal desc limit 1) as celular,
                (select te.numero from  telefono te where te.entidad_tipo = 'CONTACTO' AND te.tipo='CONVENCIONAL TRABAJO' AND te.entidad_id = co.id order by te.principal desc limit 1) as telefono,
               (select em.correo from  email em where em.entidad_tipo = 'CONTACTO' AND em.entidad_id = co.id order by em.principal desc limit 1) as email_1,
                (select em.correo from  email em where em.entidad_tipo = 'CONTACTO' AND em.entidad_id = co.id order by em.principal asc limit 1) as email_2,
                CONCAT(IFNULL(CONCAT(co.nombre,\" \"),\"\"),IFNULL(co.apellido,\"\")) as cliente_id,
                (select count(*) from (campania_entidad ce inner join llamada ll on ce.entidad_id=ll.id and ce.entidad_tipo=:entidad_llamada)where ll.contacto_id=co.id and ce.campania_id = :campania_id ) as cantidad_llamada,
                (select count(*) from (campania_entidad ce inner join mail ml on ce.entidad_id=ml.id and ce.entidad_tipo=:entidad_mail)where ml.contacto_id=co.id and ce.campania_id = :campania_id)  as cantidad_mail,
                (select count(*) from (campania_entidad ce inner join sms s on ce.entidad_id=s.id and ce.entidad_tipo=:entidad_sms)where s.contacto_id=co.id and ce.campania_id = :campania_id) as cantidad_sms
                ";

        $criteria->compare('t.id', $this->id, true, 'OR');
        $criteria->compare('(select  cus.username from cruge_user cus where cus.iduser=t.owner_id)', $this->owner_id, true, 'OR');
        $criteria->compare('co.documento', $this->identificacion, true, 'OR');
        $criteria->compare('CONCAT(IFNULL(CONCAT(co.nombre," "),""),IFNULL(co.apellido,""))', $this->cliente_id, true, 'OR');

        $criteria->join = "  inner join contacto co  on co.id=t.cliente_id  and t.campania_id=:campania_id";

//        $criteria->group = " co.id";
        if ($idOperador) {
            $criteria->addCondition("t.campania_id=:campania_id  AND t.owner_id=:idRol ");
            //$criteria->addCondition("t.campania_id=:campania_id  AND t.owner_id=:idRol ");
            $Params = array(
                ':campania_id' => $campania_id,
                ':idRol' => $idOperador,
                ':estadoActivo' => Contacto::ESTADO_ACTIVO,
                ':entidad_sms' => Campanias_Constants::SMS,
                ':entidad_llamada' => Campanias_Constants::LLAMADA,
                ':entidad_mail' => Campanias_Constants::EMAIL
            );
        } else {
            $Params = array(
                ':campania_id' => $campania_id,
                ':entidad_sms' => Campanias_Constants::SMS,
                ':entidad_llamada' => Campanias_Constants::LLAMADA,
                ':entidad_mail' => Campanias_Constants::EMAIL
            );
        }
        $criteria->group = " co.id";

        $criteria->params = array_merge($criteria->params, $Params);

        $sort->attributes = array(
            't.cliente_id' => array(
                'asc' => 'CONCAT(IFNULL(CONCAT(co.nombre," "),""),IFNULL(co.apellido,"")) asc',
                'desc' => 'CONCAT(IFNULL(CONCAT(co.nombre," "),""),IFNULL(co.apellido,"")) desc',
            ),
            't.owner_id' => array(
                'asc' => '(select  cus.username from cruge_user cus where cus.iduser=t.owner_id) asc',
                'desc' => '(select  cus.username from cruge_user cus where cus.iduser=t.owner_id) desc',
            ),
            'cantidad_sms' => array(
                'asc' => '(select count(*) from (campania_entidad ce inner join sms s on ce.entidad_id=s.id and ce.entidad_tipo=:entidad_sms)where s.contacto_id=co.id ) asc',
                'desc' => '(select count(*) from (campania_entidad ce inner join sms s on ce.entidad_id=s.id and ce.entidad_tipo=:entidad_sms)where s.contacto_id=co.id ) desc',
            ),
            'cantidad_llamada' => array(
                'asc' => '(select count(*) from (campania_entidad ce inner join llamada ll on ce.entidad_id=ll.id and ce.entidad_tipo=:entidad_llamada)where ll.contacto_id=co.id ) asc',
                'desc' => '(select count(*) from (campania_entidad ce inner join llamada ll on ce.entidad_id=ll.id and ce.entidad_tipo=:entidad_llamada)where ll.contacto_id=co.id ) desc',
            ),
            'cantidad_mail' => array(
                'asc' => '(select count(*) from (campania_entidad ce inner join mail ml on ce.entidad_id=ml.id and ce.entidad_tipo=:entidad_mail)where ml.contacto_id=co.id ) asc',
                'desc' => '(select count(*) from (campania_entidad ce inner join mail ml on ce.entidad_id=ml.id and ce.entidad_tipo=:entidad_mail)where ml.contacto_id=co.id ) desc',
            ),
            'identificacion' => array(
                'asc' => 'co.documento asc',
                'desc' => 'co.documento desc',
            ),
            '*'
        );
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
            'sort' => $sort,
        ));
    }

    /**
     * Muestra todos los contactos asignados a cada operador
     * @author Miguel Alba <malba@tradesystem.com.ec>
     * @param type $campania_id
     * @param type $idOperador
     * @return type
     */
    public function operadorContactosCampania($campania_id, $idOperador, $id_cliente = null) {

        $command = Yii::app()->db->createCommand()
                ->select("
                 cu.nombre,co.documento,
                cco.id as id,cco.campania_id as campania_id,co.id as contacto_id,co.celular as celular,co.telefono as telefono,co.email_1 as email_1,co.email_2 as email_2,CONCAT(IFNULL(CONCAT(co.nombre,\" \"),\"\"),IFNULL(co.apellido,\"\")) as cliente_id,
                (select count(*) from (campania_entidad ce inner join llamada ll on ce.entidad_id=ll.id and ce.entidad_tipo='LLAMADA')where ll.contacto_id=co.id ) as cantidad_llamada,
                (select count(*) from (campania_entidad ce inner join mail ml on ce.entidad_id=ml.id and ce.entidad_tipo='EMAIL')where ml.contacto_id=co.id )  as cantidad_mail,
                (select count(*) from (campania_entidad ce inner join sms s on ce.entidad_id=s.id and ce.entidad_tipo='SMS')where s.contacto_id=co.id ) as cantidad_sms")
                ->from(" campania_clientes_owner cco")
//                 inner join contacto co  on co.id=t.cliente_id  and t.campania_id=:campania_id
                ->join('contacto co', 'cco.cliente_id=co.id')
                ->leftJoin('cuenta cu', 'co.cuenta_id=cu.id')
                ->where("cco.campania_id=:campania_id and cco.owner_id=:owner_id AND co.estado = :estadoActivo");


        if ($id_cliente) {
            $command->andWhere("cco.cliente_id=:cliente_id");
            $command->bindValues(array(
                ':campania_id' => $campania_id,
                ':owner_id' => $idOperador,
                ':estadoActivo' => Contacto::ESTADO_ACTIVO,
                ':cliente_id' => $id_cliente
            ));
        } else {
            $command->bindValues(array(
                ':campania_id' => $campania_id,
                ':owner_id' => $idOperador,
                ':estadoActivo' => Contacto::ESTADO_ACTIVO,
            ));
        }

        $command->order("co.nombre");
        $resultado = $command->queryAll();

        return $resultado;
    }

    public function searchContactos($campania_id = null) {
        $criteria = new CDbCriteria;
        $criteria->with = array('cliente');

        $criteria->compare('t.id', $this->id, true, 'OR');
        $criteria->compare('t.owner_id', $this->owner_id, true, 'OR');
        $criteria->compare('CONCAT(IFNULL(CONCAT(cliente.nombre," "),""),IFNULL(cliente.apellido,""))', $this->cliente_id, true, 'OR');

        $criteria->addCondition('t.campania_id=:campania_id', 'AND');

        $Params = array(':campania_id' => $campania_id,);

        $criteria->params = array_merge($criteria->params, $Params);
        $criteria->group = "cliente.id";

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageSize' => 5,
            ),
        ));
    }

    /**
     * 
     * @param type $campania_id
     * @return \CActiveDataProvider
     */
    public function searchContactoNoCampania($campania_id) {
        $criteria = new CDbCriteria;
        $sort = new CSort;
        $criteria->with = array('cuenta');
        $criteria->compare('CONCAT(IFNULL(CONCAT(t.nombre," "),""),IFNULL(t.apellido,""))', $this->cliente_id, true, 'OR');
        $criteria->compare('t.cargo', $this->cargo, true, 'OR');
        $criteria->compare('cuenta.nombre', $this->cuenta_id, true, 'OR');
        $criteria->addCondition('t.id not in (select cco.cliente_id from campania_clientes_owner cco where cco.campania_id =:camapania_id)', 'AND');
        $criteria->addCondition('t.estado=:estado', 'AND');

        $criteria->group = 't.id';

        $Params = array(':camapania_id' => $campania_id, ':estado' => 'ACTIVO');
        $criteria->params = array_merge($criteria->params, $Params);

        /* Sort criteria */

        $sort->attributes = array(
            't.nombre_completo' => array(
                'asc' => 'CONCAT(IFNULL(CONCAT(t.nombre," "),""),IFNULL(t.apellido,"")) asc',
                'desc' => 'CONCAT(IFNULL(CONCAT(t.nombre," "),""),IFNULL(t.apellido,"")) desc',
            ),
            '*',
        );
//        $sort->defaultOrder = 't.nombre asc';
        $sort->defaultOrder = 'concat(t.nombre," ",t.apellido) asc';

        return new CActiveDataProvider('Contacto', array(
            'criteria' => $criteria, 'sort' => $sort,
        ));
    }

    public function searchClientesRol($campania_id, $idOperador) {
        $criteria = new CDbCriteria;
        $sort = new CSort;
        $criteria->with = array('cliente');
//        $criteria->select = "*";
        // $criteria->select = "t.id as clienteOwnerId, t.cliente_id as id,t.campania_id ";
        $criteria->compare('t.id', $this->id, true, 'OR');
        $criteria->compare('t.cliente_id', $this->cliente_id, true, 'OR');
        $criteria->compare('t.campania_id', $this->campania_id, true, 'OR');
//        $criteria->compare('t.owner_id', $this->owner_id, true, 'OR');
//        $criteria->compare('CONCAT(IFNULL(CONCAT(cliente.nombre," "),""),IFNULL(cliente.apellido,""))', $this->cliente_id, true, 'OR');
        $criteria->addCondition("t.campania_id=:campania_id  AND t.owner_id=:idRol AND cliente.estado = :estadoActivo");
        $Params = array(':campania_id' => $campania_id,
            ':idRol' => $idOperador,
            ':estadoActivo' => Contacto::ESTADO_ACTIVO
        );

        $criteria->params = array_merge($criteria->params, $Params);
        $criteria->group = "cliente.id";
        $sort->defaultOrder = 'concat(cliente.nombre," ",cliente.apellido) asc';
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'sort' => $sort,
            'pagination' => array(
                'pageSize' => 5,
            ),
        ));
    }

    public function generatebuton($entidad_tipo) {
        $href = '#';
        $colorbycount = 'btn-inverse';
        $event_click = 'return false;';

        switch ($entidad_tipo) {
            case 'LLAMADA':
                if ($this->campania->permitirBotonesFecha()) {
                    $classenablefordate = '';
                    $href = $this->contacto_id;
                    $event_click = "return crearLlamadaCampania($href,$this->id);";
                } else {
                    $classenablefordate = 'disabled';
                }
                if (!$this->cantidad_llamada == 0) {
                    $colorbycount = ' btn-warning';
                }
                echo "<a title='Registrar llamada' id='llamada_cco_$this->id' rel = 'tooltip'  onclick='$event_click' data-original-title = 'Registrar llamada'>
                <button class = 'btn $colorbycount $classenablefordate'><i class = 'icon-phone'></i> (" . $this->cantidad_llamada . ")</button>
                </a>";
                break;
            case 'EMAIL':
                if ($this->campania->permitirBotonesFecha()) {
                    $classenablefordate = '';
                    $href = $this->contacto_id;
                    $event_click = "return crearEmailCampania($href,$this->id);";
                } else {
                    $classenablefordate = 'disabled';
                }
                if (!$this->cantidad_mail == 0) {
                    $colorbycount = ' btn-primary';
                }
                echo "<a title='' class='email' id='mail_cco_$this->id' rel='tooltip' onclick='$event_click' data-original-title='Enviar Correo Electrónico'>
                <button class='btn $colorbycount $classenablefordate'><i class='icon-envelope'></i> (" . $this->cantidad_mail . ")</button>
                </a>";
                break;
            case 'SMS':
                if ($this->campania->permitirBotonesFecha()) {
                    $classenablefordate = '';
                    $href = "sms/sms/cargarFormularioSmsCampania/cuenta_id/$this->contacto_id/campania_id/" . $this->campania_id . '/camp_clie_owner/' . $this->id;
                    $event_click = 'return crearSmsCampania("' . $href . '");';
                } else {
                    $classenablefordate = 'disabled';
                }
                if (!$this->cantidad_sms == 0) {
                    $colorbycount = ' btn-success';
                }

                echo "<a title='' class='sms'  id='sms_cco_$this->id' rel='tooltip'  onclick='$event_click' data-original-title='Enviar Sms'>
                <button class='btn $colorbycount $classenablefordate'><i class='icon-comments'></i> (" . $this->cantidad_sms . ")</button>
                </a>";
                break;
        }
    }

    public function generatebutonRol($entidad_tipo) {
        $href = '#';
        $colorbycount = 'btn-inverse';
        $event_click = 'return false;';

        switch ($entidad_tipo) {
            case 'LLAMADA':
                if ($this->campania->permitirBotonesFecha()) {
                    $classenablefordate = '';
                    $href = $this->contacto_id;
                    $event_click = "return crearLlamadaCampania($href,$this->id);";
                } else {
                    $classenablefordate = 'disabled';
                }
                if (!$this->cantidad_llamada == 0) {
                    $colorbycount = ' btn-warning';
                }
                echo "<a title='Registrar llamada' id='llamada_cco_$this->id' rel = 'tooltip'  onclick='$event_click' data-original-title = 'Registrar llamada'>
                <button class = 'btn $colorbycount $classenablefordate'><i class = 'icon-phone'></i> (" . $this->cantidad_llamada . ")</button>
                </a>";
                break;
            case 'EMAIL':
                if ($this->campania->permitirBotonesFecha()) {
                    $classenablefordate = '';
                    $href = $this->contacto_id;
                    $event_click = "return crearEmailCampaniaRol($href,$this->id);";
                } else {
                    $classenablefordate = 'disabled';
                }
                if (!$this->cantidad_mail == 0) {
                    $colorbycount = ' btn-primary';
                }
                echo "<a title='' class='email' id='mail_cco_$this->id' rel='tooltip' onclick='$event_click' data-original-title='Enviar Correo Electrónico'>
                <button class='btn $colorbycount $classenablefordate'><i class='icon-envelope'></i> (" . $this->cantidad_mail . ")</button>
                </a>";
                break;
            case 'SMS':
                if ($this->campania->permitirBotonesFecha()) {
                    $classenablefordate = '';
//                    AjaxCargarFormularioCampaniaRoles
                    $href = "sms/sms/cargarFormularioSmsCampania/cuenta_id/$this->contacto_id/campania_id/" . $this->campania_id . '/camp_clie_owner/' . $this->id;
                    $event_click = 'return crearSmsCampania("' . $href . '");';
                } else {
                    $classenablefordate = 'disabled';
                }
                if (!$this->cantidad_sms == 0) {
                    $colorbycount = ' btn-success';
                }

                echo "<a title='' class='sms'  id='sms_cco_$this->id' rel='tooltip'  onclick='$event_click' data-original-title='Enviar Sms'>
                <button class='btn $colorbycount $classenablefordate'><i class='icon-comments'></i> (" . $this->cantidad_sms . ")</button>
                </a>";
                break;
        }
    }

    /**
     * Mostrar los contactos de un rol asignados en una campaña
     * 
     * @author Miguel Alba <malba@tradesystem.com.ec>
     */
    public function contactosUsuarioCampania($campania_id, $owner_id, $idContacto = null) {

        $command = Yii::app()->db->createCommand()
//                co.id,co.nombre,co.apellido
                ->select('co.id, CONCAT(IFNULL(CONCAT(co.nombre," "),""),IFNULL(co.apellido,"")) as nombrecompleto ')
                ->from("campania_clientes_owner cco")
                ->join('contacto co', 'cco.cliente_id=co.id')
                ->where("cco.campania_id=:campania_id and cco.owner_id=:owner_id AND co.estado = :estadoActivo");

        if ($idContacto) {
            $command->andWhere('cco.cliente_id =:contacto_id');
            $command->bindValues(array(
                ':campania_id' => $campania_id,
                ':owner_id' => $owner_id,
                ':estadoActivo' => Contacto::ESTADO_ACTIVO,
                ':contacto_id' => $idContacto,
            ));
        } else {
            $command->bindValues(array(
                ':campania_id' => $campania_id,
                ':owner_id' => $owner_id,
                ':estadoActivo' => Contacto::ESTADO_ACTIVO,
            ));
        }

        $result = $command->queryAll();
        return $result;
    }

    public function getClientesAccion($idClientes, $accion) {
        $command = Yii::app()->db->createCommand();
        $command->select = 'distinct(co.id)';
        $command->from = 'campania_clientes_owner cco';
        $command->join = 'LEFT JOIN contacto co ON cco.cliente_id = co.id ';
        $command->where = '(cco.id in (' . $idClientes . '))';
        //todos los que tengan celular
        if ($accion == "SMS") {
            $command->join("telefono te", "te.entidad_id=co.id AND te.entidad_tipo=:entidad_tipo AND te.tipo=:tipo");
            $command->params = array_merge($command->params, array(':entidad_tipo' => Crm_Constants::ENTIDAD_TIPO_CONTACTO, ':tipo' => Telefono::TIPO_CELULAR));
        }
        //todos los que tengan mails
        if ($accion == "EMAIL") {
            $command->join("email em", "em.entidad_id=co.id AND em.entidad_tipo= :entidad_tipo");
            $command->params = array_merge($command->params, array(':entidad_tipo' => Crm_Constants::ENTIDAD_TIPO_CONTACTO));
        }
        return $command->queryColumn();
    }

    public function getClientesAccionRol($idCliente, $accion) {
        $command = Yii::app()->db->createCommand();
        $command->select = 'co.id';
        $command->from = ' contacto co';
        $command->where = '(co.id in (' . $idCliente . '))';
        if ($accion == "SMS") {
            $command->andWhere('co.celular is not null AND co.celular !=""');
        }
        if ($accion == "EMAIL") {
            $command->andWhere("(co.email_1 is not null AND co.email_1 !='') OR (co.email_2 is not null AND co.email_2 !='')");
        }
        return $command->queryColumn();
    }

}
